In many computer systems using external data storage subsystems, there are multiple physical paths, or buses, to each data storage subsystem. One reason for having multiple paths is to provide redundancy in the case of a failed path. The selection of a path for sending an I/O request can affect the quality of service for applications initiating I/O requests because paths have limited capacity for carrying data. Path capacity limitations may be the result of multiple influences, such as the fundamental bandwidth limitation of the physical connection or the storage subsystem's front-end resources for processing requests.